
#pragma region CLASS_DESCRIPTION
/*
* =========================================================================================

* AUTHOR:      Physics Core Team (Ron Ram, Matt Hoyes, Randy Prieto, Kris Greene)
* DATE:        01/17/2012
*
* CLASS:       ICollision2D Interface (ICollision2D.h)
*
* DESCRIPTION:
* ---------------------------------------------------------------------------------------
*	This is a Protocol Class
*	All 2D shapes must implement collision behaviours described in this interface
* =========================================================================================
*/
#pragma endregion


#ifndef ICOLLISION2D_H_
#define ICOLLISION2D_H_

#include "IPhysicsObject.h"

namespace Physics 
{
	//Forward declaration
	class Box2D;
	class Circle2D;

	class ICollision2D : virtual public IPhysicsObject
	{
#pragma region IMPORTANT_NOTE_ABOUT_DESTRUCTOR_in_BASE_Class
		/********************** IMPORTANT **********************/
		//For a C++ pure abstract class or 'C# style Interface class' use either one of the two methods to declare a destructor
		//BUT a destructor is needed in this class!!!

		//Method 1:
		//public: virtual ~ICollision2D() { }

		//Method 2: 
		//protected: ~ICollision2D() { }
#pragma endregion


	public:
		virtual ~ICollision2D() { }										//C001: EMPTY Destructor

		//------------------ ABSTRACT COLLISION METHODS ------------------
		virtual bool collision(const Box2D &box2d) = 0;					//M001: this.Shape -> Box2D collision check
		virtual bool collision(const Circle2D &circle2d) = 0;			//M002: this.Shape -> Circle2D collision check
		//virtual bool collision(const Triangle2D &triangle) =0;		//M003: this.Shape -> Triangle2D collision check
		//virtual bool collision(const Capsule2D &capsule) = 0;			//M004: this.Shape -> Capsule2D collision check
		//virtual bool collision(const Convex2D &convex) = 0;			//M005: this.Shape -> Convex2D collision check
	};
} /* NAMESPACE */

#endif
